﻿///////////////////////////////////////////////////////////////////////////////
// 文件名： Root.cc
// 作者：   671643387@qq.com
// 日期：   2015年11月1日 下午6:14:50
// 简介：   
///////////////////////////////////////////////////////////////////////////////

#include <cassert>

#if defined(__WINDOWS__)
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#endif

#include "graphics/Root.hpp"
using namespace ::graphics;

Root::Root()
    : eventDelegate_()
    , render_()
{

}

Root::~Root()
{
    
}

bool Root::Initialize()
{
    assert(render_);
    render_->SetEventDelegate(eventDelegate_.get());
    if (!render_->Initialize())
        return false;
    eventDelegate_->OnRootInitialized(this);
    return true;
}

void Root::Run()
{
#if defined(__WINDOWS__)
    MSG msg;
    ZeroMemory(&msg, sizeof(msg));
    while (msg.message != WM_QUIT)
    {
        if (::PeekMessage(&msg, NULL, 0L, 0L, PM_REMOVE))
        {
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
        }
        else
        {
            render_->RenderFrame();
        }
    }
#endif

    render_->Shutdown();
}

void Root::SetEventDelegate(EventDelegatePtr delegate)
{
    eventDelegate_ = delegate;
}

void Root::SetRender(::graphics::graphics::render::RenderPtr render)
{
    render_ = render;
}

::graphics::graphics::render::RenderPtr& Root::GetRender()
{
    return render_;
}